<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    /*******************************
     * 正则表达式
     * *******************************/
    new RegExp(字符串 || 正则,修饰词)
    /*
        使用nre RegExp的时候，如果字符串中有转义符，那这个时候需要把\用转义符转义;
    */

    string.match(正则)
    /*
     * 将匹配到的字符串提取出来放到数组中。
     返回的是数组，如果没匹配到，返回null

     注意：
     如果只找到一个，那么length为1，但是视觉上有好几个

     视觉上有好几个:{
         第一项:为匹配到的字符,
         第二项:为匹配到的字符索引,
         第三项:整个字符串
     }
    * */

    string.search(字符串||正则)
    //找到指定字符的索引，如果找不到返回-1

    正则.test(str)
    /*
        判断规则中是否有匹配项，如果有返回true，否则false
        规则默认是区分大小写的。
    */

    string.replace(str,str1 || fn($0,$1,$2))
    /*
    * 查找字符串并且替换
    * 参数：
    *   str
    *       需要替换的字符串，或者正则规则
*       str1
*           替换后的内容
*       fn
*           回调函数,每匹配成功一次，调用一次
*           回调函数中必须有返回值。不然匹配的字符串会变成undefined
*           回调函数默认参数的意义：
*               $0
*                   本次匹配到的字符串结果
*               $1
*                   本次匹配到字符串的索引值
*                   如果正则中有()，子项，那么第二个参数之后就是子项
*               $2
*                   整个字符串
    * */
    reg.exec(str)
    /* 
     匹配字符串
        返回一个数组，第一项为匹配到的值，第二项为第一个子项，第三项为第二个子项，以此类推
    */


    /****************
     * 正则案例
     * ***************/
    过滤标签,只留下标签中的内容
           var re = /<[^>]+>|\s+/g;
    去掉首尾空格
            var re = /^\s+|\s+$/g;
    验证QQ
            var re = /^[^0][0-9]{4,11}$/
    验证手机号
            var re = /^[1-9][34587]\d{9}$/
    验证邮箱
            var re = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;


    /****************
     * 正则规则
     * ***************/
    ():子项/提权
        在正则中只要有了子项,那么回调函数的第二个参数之后就是子项;
        找子项可以从左往右找

    []:范围
        [1|2|3] -> [123],123中任意一个字符
        [0-9] ->  [0123456789]中的一个字符
        [a-z] ->  字母a~z中的一个字母
        [A-Za-z] -> 字母A-Z 和字母a-z的一个字母
        [\u4e00-\u9fa5] -> 中文范围

    ^:开头
    $:结尾
        加了开头和结尾之后,整个字符串都必须匹配规则才会返回,不会一段满足就返回

    ^:排除
        ^在[]中为排除的意思


    /****************
     * 正则转义词
     * ***************/
    \:反斜杠转意词
    \d:一个数字
    \D:一个非数字
    \w:一个数字、字母、下划线
    \W:非数字、字母、下划线
    \s:一个空格
    \n && \r:回车
    \S:非空格;
    \b:边界符   空格,算边界符
    \B:非边界符
    \1:重复一次第n个子项    /a(3)\1/  重复一次第一个子项
    .:代表任意字符


    /****************
     * 正则量词(放在要检索的规则之后)
     * ***************/
     *  {0,}:最少没有,最多不限;
     + {1,}:最少匹配一个,最多不限;
     ? {0,1}:最少没有,最多一个;
     {n,m}:最少n个,最大m个;

     
    /****************
     * 正则修饰符（如果有多个修饰符，那么顺序可以颠倒的。）
     * ***************/
    i:忽略大小写
    g:global (全局,就算有匹配项也会一直查找整个字符串)

</script>
</html>
